package copyto.ui.history.internal;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.property.list.IListProperty;
import org.eclipse.core.databinding.property.list.MultiListProperty;
import org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider;
import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.part.ViewPart;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceRegistration;
import copyto.core.Result;
import copyto.core.Results;
import copyto.ui.UIResultHandler;
public class HistoryViewPart extends ViewPart implements UIResultHandler {
private TreeViewer viewer;
private ServiceRegistration serviceRegistration;
private WritableList items;
@Override
public void createPartControl(Composite parent) {
final Composite client = new Composite(parent, SWT.NULL);
viewer = new TreeViewer(client, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL
| SWT.H_SCROLL | SWT.FULL_SELECTION);
final TreeColumnLayout tableLayout = new TreeColumnLayout();
client.setLayout(tableLayout);
final Tree table = viewer.getTree();
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setFont(parent.getFont());
final DataBindingContext ctx = new DataBindingContext();
table.addDisposeListener(new DisposeListener() {
public void widgetDisposed(final DisposeEvent e) {
ctx.dispose();
viewer = null;
}
});
final String[] columnNames = new String[] { "target.name" };
final String[] columnLables = new String[] { "Target" };
for (int i = 0; i < columnNames.length; ++i) {
final TreeViewerColumn viewerColumn = new TreeViewerColumn(viewer,
SWT.LEFT);
viewerColumn.getColumn().setText(columnLables[i]);
tableLayout
.setColumnData(viewerColumn.getColumn(),
new ColumnWeightData(
i == columnNames.length - 1 ? 100 : 30));
}
items = new WritableList();
MultiListProperty childrenProp = new MultiListProperty(
new IListProperty[] {
PojoProperties.list("successes"),
PojoProperties.list("failures") });
/*ViewerSupport.bind(viewer, items, childrenProp, BeanProperties
.values(columnNames));*/
ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
childrenProp.listFactory(), null);
viewer.setContentProvider(contentProvider);
ObservableMapLabelProvider labelProvider = new ObservableMapLabelProvider(
BeanProperties.value("target.name").observeDetail(
contentProvider.getKnownElements())) {
public String getText(Object element) {
if (element instanceof Result) {
}
return super.getText(element);
}
};
viewer.setLabelProvider(labelProvider);
viewer.setInput(items);
serviceRegistration = FrameworkUtil.getBundle(getClass())
.getBundleContext().registerService(
UIResultHandler.class.getName(), this, null);
}
@Override
public void dispose() {
if (serviceRegistration != null) {
serviceRegistration.unregister();
}
super.dispose();
}
@Override
public void setFocus() {
if (viewer != null) {
viewer.getControl().setFocus();
}
}
public void handleResults(Results result, Shell shell) {
items.add(result);
}
}